package com.example.listafacil.telas;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.listafacil.R;
import com.example.listafacil.BaseDados.BancoDeDados;
import com.example.listafacil.BaseDados.TabelasCampos;
import com.example.listafacil.componentes.ItemListaDeCompra;

public class TelaListaDeCompra extends Fragment {
	private BancoDeDados bd;
	private View rootView;

	public static TelaListaDeCompra newInstance() {
		TelaListaDeCompra fragment = new TelaListaDeCompra();
		return fragment;
	}

	public TelaListaDeCompra() {

	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		bd = new BancoDeDados(getActivity());
		rootView = inflater.inflate(R.layout.tela_lista_de_compra, container, false);
		final Button btnAdicionar = (Button) rootView.findViewById(R.id.btn_adicionar_item);
		btnAdicionar.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

				builder.setMessage("Nome do item").setTitle("Adicionar item");

				final EditText edt = new EditText(getActivity());
				builder.setView(edt);

				// Add the buttons
				builder.setPositiveButton("Salvar", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {
						Map<String, String> valores = new HashMap<String, String>(1);
						valores.put(TabelasCampos.TabelaItem.NOME, edt.getText().toString());
						adicionarLinha(rootView, valores, true);

					}
				});
				builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {
					}
				});

				builder.create().show();

			}
		});

		List<Map<String, String>> listarTabelaItem = bd.listarItensParaComprar();
		for (Map<String, String> item : listarTabelaItem) {
			adicionarLinha(rootView, item, false);
			String quantidade = item.get(TabelasCampos.TabelaLista.QUANTIDADE);
			String valor = item.get(TabelasCampos.TabelaLista.VALOR);
			somarValorTotal(valor, quantidade);
		}

		return rootView;
	}

	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		((TelaPrincipal) activity).setTituloDaSecao("Itens");
	}

	private void adicionarLinha(View v, final Map<String, String> valores, boolean deveSalvar) {
		final ItemListaDeCompra linha = new ItemListaDeCompra(getActivity(), valores, true) {

			private EditText valor;
			private EditText quantidade;

			@Override
			public void caixadeTextoPerdeuOFoco(ItemListaDeCompra linha) {
			}

			@Override
			public void checkado(CompoundButton buttonView, boolean isChecked) {
				if (isChecked) {
					AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

					builder.setMessage("Nome do item").setTitle("Adicionar item");

					{
						LinearLayout layoutPrincipal = new LinearLayout(getContext());
						layoutPrincipal.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
						layoutPrincipal.setOrientation(LinearLayout.VERTICAL);
						layoutPrincipal.setGravity(Gravity.FILL_HORIZONTAL);
						{
							LinearLayout layout = new LinearLayout(getContext());
							layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
							layout.setOrientation(LinearLayout.HORIZONTAL);
							layout.setGravity(Gravity.FILL_HORIZONTAL);

							TextView tvValor = new TextView(getContext());
							tvValor.setText("Valor:");
							valor = new EditText(getContext());
							valor.setId(0);
							TextView tvQuantidade = new TextView(getContext());
							tvQuantidade.setText("Quantidade:");
							quantidade = new EditText(getContext());
							quantidade.setId(1);

							layout.addView(tvValor);
							layout.addView(valor);
							layout.addView(tvQuantidade);
							layout.addView(quantidade);

							layoutPrincipal.addView(layout);
						}
						builder.setView(layoutPrincipal);
					}

					// Add the buttons
					builder.setPositiveButton("Salvar", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int id) {
							valores.put(TabelasCampos.TabelaLista.QUANTIDADE, quantidade.getText().toString());
							valores.put(TabelasCampos.TabelaLista.VALOR, valor.getText().toString());
							bd.atualizarTabelaLista(valores);
							somarValorTotal(valores.get(TabelasCampos.TabelaLista.VALOR), valores.get(TabelasCampos.TabelaLista.QUANTIDADE));
							setValorEQuantidade(valores.get(TabelasCampos.TabelaLista.VALOR), valores.get(TabelasCampos.TabelaLista.QUANTIDADE));
						}
					});
					builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int id) {
						}
					});

					builder.create().show();

				} else {
					subtrairValorTotal(getValor().toString(), getQuantidade().toString());
					limparValorEQuantidade();
				}
			}

			@Override
			public void cliqueNoBotaoDeRemover() {

			}

		};
		((LinearLayout) v.findViewById(R.id.centro)).addView(linha);
		if (deveSalvar) {
			long resultado = bd.inserirTabelaItem(linha.recuperarValores());
			if (resultado != -1) {
				Toast.makeText(getActivity(), "Salvou", Toast.LENGTH_SHORT).show();
			} else {
				Toast.makeText(getActivity(), "Nao salvou", Toast.LENGTH_SHORT).show();
			}
		}

	}

	private void somarValorTotal(String valor, String quantidade) {
		TextView total = (TextView) rootView.findViewById(R.id.valor_total);
		String textoTotal= total.getText().toString();
		if(textoTotal==null || textoTotal.isEmpty()){
			textoTotal="0";
		}
		float valorTotal = Float.parseFloat(textoTotal);
		float resultado =(Float.parseFloat(valor)*Integer.parseInt(quantidade)) + valorTotal;
		total.setText(resultado+"");

	}
	private void subtrairValorTotal(String valor, String quantidade) {
		TextView total = (TextView) rootView.findViewById(R.id.valor_total);
		String textoTotal= total.getText().toString();
		if(textoTotal==null || textoTotal.isEmpty()|| textoTotal.equals("0")){
			return;
		}
		float valorTotal = Float.parseFloat(textoTotal);
		float resultado =valorTotal -(Float.parseFloat(valor)*Integer.parseInt(quantidade));
		total.setText(resultado+"");

	}

	@Override
	public void onDestroyView() {
		super.onDestroyView();
		bd.close();
	}

	@Override
	public void onStart() {
		super.onStart();
	}

	@Override
	public void onStop() {
		super.onStop();
	}
}
